// 测试视频下载助手 - 后台脚本

class BackgroundManager {
  constructor() {
    this.init()
  }

  init() {
    console.log('测试视频下载助手后台服务已启动')
    
    // 监听扩展安装
    chrome.runtime.onInstalled.addListener((details) => {
      this.handleInstalled(details)
    })

    // 监听标签页更新
    chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
      this.handleTabUpdated(tabId, changeInfo, tab)
    })

    // 监听消息
    chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
      this.handleMessage(request, sender, sendResponse)
      return true
    })

    // 监听扩展图标点击
    chrome.action.onClicked.addListener((tab) => {
      this.handleActionClicked(tab)
    })
  }

  // 处理扩展安装
  handleInstalled(details) {
    if (details.reason === 'install') {
      console.log('扩展首次安装')
      this.showWelcomeNotification()
    } else if (details.reason === 'update') {
      console.log('扩展已更新')
    }
  }

  // 处理标签页更新
  handleTabUpdated(tabId, changeInfo, tab) {
    if (changeInfo.status === 'complete' && tab.url) {
      // 检查是否为目标网站
      if (this.isTargetSite(tab.url)) {
        this.updateBadge(tabId, 'ready')
        this.injectContentScript(tabId)
      } else {
        this.updateBadge(tabId, '')
      }
    }
  }

  // 处理消息
  async handleMessage(request, sender, sendResponse) {
    try {
      switch (request.action) {
        case 'checkAuth':
          const authResult = await this.checkAuthStatus(sender.tab)
          sendResponse({ success: true, data: authResult })
          break
        
        case 'downloadProgress':
          this.handleDownloadProgress(request.data)
          sendResponse({ success: true })
          break
        
        case 'showNotification':
          this.showNotification(request.title, request.message, request.type)
          sendResponse({ success: true })
          break
        
        default:
          sendResponse({ success: false, error: '未知操作' })
      }
    } catch (error) {
      console.error('处理消息失败:', error)
      sendResponse({ success: false, error: error.message })
    }
  }

  // 处理扩展图标点击
  handleActionClicked(tab) {
    if (this.isTargetSite(tab.url)) {
      // 在目标网站上，打开弹窗
      chrome.action.setPopup({ popup: 'src/popup.html' })
    } else {
      // 在其他网站上，显示提示
      this.showNotification(
        '测试视频下载助手',
        '请在测试平台上使用此扩展',
        'info'
      )
    }
  }

  // 检查是否为目标网站
  isTargetSite(url) {
    return url && (
      url.includes('test.com') ||
      url.includes('localhost') ||
      url.includes('127.0.0.1')
    )
  }

  // 更新徽章
  updateBadge(tabId, text) {
    chrome.action.setBadgeText({
      tabId: tabId,
      text: text
    })
    
    if (text === 'ready') {
      chrome.action.setBadgeBackgroundColor({
        tabId: tabId,
        color: '#52c41a'
      })
    }
  }

  // 注入内容脚本
  async injectContentScript(tabId) {
    try {
      await chrome.scripting.executeScript({
        target: { tabId: tabId },
        files: ['src/content.js']
      })
    } catch (error) {
      console.error('注入内容脚本失败:', error)
    }
  }

  // 检查认证状态
  async checkAuthStatus(tab) {
    try {
      const results = await chrome.scripting.executeScript({
        target: { tabId: tab.id },
        function: () => {
          // 检查登录状态
          const userInfo = document.querySelector('.user-info, .username, .avatar')
          const loginBtn = document.querySelector('.login-btn, [href*="login"]')
          
          return {
            isLoggedIn: userInfo !== null && loginBtn === null,
            cookies: document.cookie,
            token: localStorage.getItem('token') || sessionStorage.getItem('token')
          }
        }
      })
      
      return results[0]?.result || { isLoggedIn: false, cookies: '', token: '' }
    } catch (error) {
      console.error('检查认证状态失败:', error)
      return { isLoggedIn: false, cookies: '', token: '' }
    }
  }

  // 处理下载进度
  handleDownloadProgress(data) {
    // 更新徽章显示进度
    if (data.progress !== undefined) {
      const progress = Math.round(data.progress)
      chrome.action.setBadgeText({ text: `${progress}%` })
      chrome.action.setBadgeBackgroundColor({ color: '#1890ff' })
    }

    // 显示通知
    if (data.status === 'completed') {
      this.showNotification(
        '下载完成',
        `${data.title} 下载完成`,
        'success'
      )
      chrome.action.setBadgeText({ text: '✓' })
      chrome.action.setBadgeBackgroundColor({ color: '#52c41a' })
    } else if (data.status === 'failed') {
      this.showNotification(
        '下载失败',
        `${data.title} 下载失败: ${data.error}`,
        'error'
      )
      chrome.action.setBadgeText({ text: '✗' })
      chrome.action.setBadgeBackgroundColor({ color: '#ff4d4f' })
    }
  }

  // 显示通知
  showNotification(title, message, type = 'info') {
    // 检查通知API是否可用
    if (chrome.notifications && chrome.notifications.create) {
      const iconUrl = type === 'success' ? 'icons/icon32.png' : 
                     type === 'error' ? 'icons/icon32.png' : 
                     'icons/icon32.png'

      chrome.notifications.create({
        type: 'basic',
        iconUrl: iconUrl,
        title: title,
        message: message
      }).catch(error => {
        console.warn('通知显示失败:', error)
        // 降级到控制台输出
        console.log(`[${type.toUpperCase()}] ${title}: ${message}`)
      })
    } else {
      // 降级到控制台输出
      console.log(`[${type.toUpperCase()}] ${title}: ${message}`)
    }
  }

  // 显示欢迎通知
  showWelcomeNotification() {
    this.showNotification(
      '欢迎使用测试视频下载助手',
      '请访问测试平台开始使用下载功能',
      'info'
    )
  }
}

// 初始化后台管理器
new BackgroundManager()